-- 新增字段的 SQL 储存过程，会判断字段是否存在
DROP PROCEDURE IF EXISTS PRO_TABLE_ADD_FIELD;
DELIMITER$$
CREATE PROCEDURE PRO_TABLE_ADD_FIELD(T_NAME VARCHAR(50), C_NAME VARCHAR(50), SQL_STR VARCHAR(4000))
BEGIN
    DECLARE ROWS INT;
    SET ROWS = 0;
    SELECT COUNT(*) INTO ROWS FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = T_NAME AND COLUMN_NAME = C_NAME;
    IF (ROWS <= 0) THEN
        SET SQL_STR := CONCAT( 'ALTER TABLE ', T_NAME, ' ADD COLUMN ', C_NAME, ' ', SQL_STR);
        SET @SQL1 = SQL_STR;
        PREPARE STMT1 FROM @SQL1;
        EXECUTE STMT1;
    END IF;
END$$
DELIMITER;

<#list tables as table>
CREATE TABLE IF NOT EXISTS `${table.name}` (
    <#list table.initFiled as field>
    <#if field_index != 0>,</#if><#--                             第二行开始加逗号
    -->`${field.name}` ${field.dataType}<#--                      字段，类型
    --><#if field.len??>(${field.len})</#if><#--                  字段长度
    --><#if field.noNull> NOT NULL</#if><#--                      非空
    --><#if field.defValue??><#--                                 默认值
        --> DEFAULT <#if field.isNumber>${field.defValue}<#else>'${field.defValue}'</#if><#--
    --></#if><#--
    --><#if field.comment??> COMMENT '${field.comment}'</#if><#-- 注释  -->
    </#list>
    <#if (table.pkList?size > 0)><#--    主键 -->
    ,PRIMARY KEY `${table.name}_PK`(<#list table.pkList as pk><#if pk_index != 0>, </#if>${pk.name}</#list>)
    </#if>
    <#list table.inxMap?keys as key><#-- 普通索引 -->
    ,INDEX `${key}` (${table.inxMap[key].name})
    </#list>
    <#list table.uqMap?keys as key><#--  唯一索引 -->
    ,UNIQUE KEY `${key}` (<#list table.uqMap[key] as uq><#if uq_index != 0>, </#if>${uq.name}</#list>)
    </#list>
);
<#list table.addList as field>
CALL PRO_TABLE_ADD_FIELD('${table.name}', '${field.name}', '<#--
-->${field.dataType}<#--                      字段，类型
--><#if field.len??>(${field.len})</#if><#--                  字段长度
--><#if field.noNull> NOT NULL</#if><#--                      非空
--><#if field.defValue??><#--                                 默认值
    --> DEFAULT <#if field.isNumber>${field.defValue}<#else>'${field.defValue}'</#if><#--
--></#if><#--
--><#if field.comment??> COMMENT '${field.comment}'</#if><#-- 注释  -->
;');
</#list>
</#list>

